/**------File Info----------------------------------------------
** File name:               Frame_Key.h
** Latest modified date:    2023-11-4
** Latest version:          V1.0.0
** Description:             按键控制
**
**------------------------------------------------------------
** Created by:              fanfengwei
** Created date:            2023-11-4
** Version:                 V1.0.0
** Descriptions:            按键控制
**
**------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
*************************************************************/
#ifndef __FRAME_KEY_H__
#define __FRAME_KEY_H__
#include "stdint.h"
// 按键状态枚举
typedef enum {
    KEY_STATE_IDLE,      // 空闲状态
    KEY_STATE_PRESSED,   // 按下状态
    KEY_STATE_RELEASED,  // 释放状态
    KEY_STATE_HOLD       // 长按状态
} KeyState;

// 按键事件枚举
typedef enum {
    KEY_EVENT_NONE,      // 无事件
    KEY_EVENT_CLICK,     // 单击事件
    KEY_EVENT_DOUBLE_CLICK, // 双击事件
    KEY_EVENT_LONG_PRESS // 长按事件
} KeyEvent;
struct SKEYControl_Struct{
	bool active_level;	// 按键有效电平

	KeyState state;		// 按键状态
	KeyEvent event;		// 按键事件
	uint32_t press_time;	// 按键按下时间
	uint32_t release_time;	// 按键释放时间

	uint32_t debounce_time;	// 去抖动时间
	uint32_t long_press_time;	// 长按阈值时间
	uint32_t double_click_time;	// 双击阈值时间

	void (*on_click)(void);         // 单击回调函数
    void (*on_double_click)(void);  // 双击回调函数
    void (*on_long_press)(void);    // 长按回调函数

	uint8_t (*Read_KEY)(void);
	};
typedef struct SKEYControl_Struct KEYControl_Struct;
typedef KEYControl_Struct* PKEYControl_Struct;

void KEYRunCycle(PKEYControl_Struct gkey);
#endif








































